package pos.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;

import pos.domain.Deportista;
import pos.domain.Usuario;


//Marta
public class JDBCConocidoDAO implements IConocidoDAO {
   IUsuarioDAO udao;
   IDeportistaDAO ddao;
   private Connection conn;
   public JDBCConocidoDAO()
   {
	   conn = ConnectionManager.getInstance().checkOut();
	   udao = new JDBCUsuarioDAO(conn);
	   ddao = new JDBCDeportistaDAO(conn);
   }
   public JDBCConocidoDAO(Connection conn) {
	 this.conn = conn;
	 udao = new JDBCUsuarioDAO(conn);
	 ddao = new JDBCDeportistaDAO(conn);
}
   
protected void finalize() {
		ConnectionManager.getInstance().checkIn(conn);
	}

	public List selectUsuariosConocidos(String username) {
		 List<Usuario> conocidos = new LinkedList();
		    String usuarioOID = udao.selectUsuarioOID( username);
	   /*Un usuario sera conocido si aparece en algun registro en alguno de los dos campos*/
		    String sql = "SELECT usuario2OID usuario FROM conocidos WHERE (usuario1OID = ? ) UNION SELECT usuario1OID usuario FROM conocidos WHERE (usuario2OID = ? ) ";
	        PreparedStatement stmt = null;
	        ResultSet result = null;

	        try {
	            stmt = conn.prepareStatement(sql);
	            stmt.setString(1, usuarioOID);
	            stmt.setString(2, usuarioOID);
	            result = stmt.executeQuery();

	            while (result.next()) {
	            	
	            	Usuario u= udao.selectUsuarioByOID( result.getString("OID"));
	                conocidos.add(u);
	            }
	        } catch (SQLException e) {
	            System.out.println("Message: " + e.getMessage());
	            System.out.println("SQLState: " + e.getSQLState());
	            System.out.println("ErrorCode: " + e.getErrorCode());
	        } finally {
	            try {
	                if (result != null) {
	                    result.close();
	                }

	                if (stmt != null) {
	                    stmt.close();
	                }
	            } catch (SQLException e) {
	            }
	        }
	        return conocidos;
	}
	public List selectDeportistasConocidos(String username) {
		 List<Deportista> conocidos = new LinkedList();
		    String deportistaOID = udao.selectUsuarioOID( username);
	   /*Un usuario sera conocido si aparece en algun registro en alguno de los dos campos*/
		    String sql = "SELECT c.usuario2OID usuario FROM conocidos c,deportistas d WHERE ( c.usuario2OID = d.OID AND usuario1OID = ? ) UNION SELECT usuario1OID usuario FROM conocidos c, deportistas d WHERE (c.usuario1OID = d.OID AND usuario2OID = ? ) ";
	        PreparedStatement stmt = null;
	        ResultSet result = null;

	        try {
	            stmt = conn.prepareStatement(sql);
	            stmt.setString(1, deportistaOID);
	            stmt.setString(2, deportistaOID);
	            result = stmt.executeQuery();

	            while (result.next()) {
	            	
	            	Deportista u=  ddao.selectDeportistaByOID( result.getString("usuario"));
	                conocidos.add(u);
	            }
	        } catch (SQLException e) {
	            System.out.println("Message: " + e.getMessage());
	            System.out.println("SQLState: " + e.getSQLState());
	            System.out.println("ErrorCode: " + e.getErrorCode());
	        } finally {
	            try {
	                if (result != null) {
	                    result.close();
	                }

	                if (stmt != null) {
	                    stmt.close();
	                }
	            } catch (SQLException e) {
	            }
	        }
	        return conocidos;
	}
	public List selectEquiposConocidos(String username) {
		 List<Usuario> conocidos = new LinkedList();
		    String equiposOID = udao.selectUsuarioOID( username);
	   /*Un usuario sera conocido si aparece en algun registro en alguno de los dos campos*/
		    String sql = "SELECT usuario2OID usuario FROM conocidos c,equipos d WHERE ( c.usuario2OID = d.OID AND usuario1OID = ? ) UNION SELECT usuario1OID usuario FROM conocidos c, equipos d WHERE (c.usuario1OID = d.OID AND usuario2OID = ? ) ";
	        PreparedStatement stmt = null;
	        ResultSet result = null;

	        try {
	            stmt = conn.prepareStatement(sql);
	            stmt.setString(1, equiposOID);
	            stmt.setString(2, equiposOID);
	            result = stmt.executeQuery();

	            while (result.next()) {
	            	
	            	Usuario u= udao.selectUsuarioByOID( result.getString("usuario"));
	                conocidos.add(u);
	            }
	        } catch (SQLException e) {
	            System.out.println("Message: " + e.getMessage());
	            System.out.println("SQLState: " + e.getSQLState());
	            System.out.println("ErrorCode: " + e.getErrorCode());
	        } finally {
	            try {
	                if (result != null) {
	                    result.close();
	                }

	                if (stmt != null) {
	                    stmt.close();
	                }
	            } catch (SQLException e) {
	            }
	        }
	        return conocidos;
	}

}
